home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / saf / impl / GeneralAssociation.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  4.6 KB  |  210 lines

  1. package com.extensibility.saf.impl;
  2.  
  3. import com.extensibility.saf.AdjunctException;
  4. import com.extensibility.saf.Association;
  5. import com.extensibility.saf.SchemaAdjunct;
  6. import java.util.StringTokenizer;
  7. import org.w3c.dom.Attr;
  8. import org.w3c.dom.Element;
  9. import org.w3c.dom.Node;
  10. import org.w3c.dom.Text;
  11.  
  12. public class GeneralAssociation implements Association, Tags {
  13.    protected Element element;
  14.    protected SchemaAdjunct adjunct;
  15.    protected static final int FIND = 0;
  16.    protected static final int CREATE = 1;
  17.    protected static final int DELETE = 2;
  18.  
  19.    public GeneralAssociation(SchemaAdjunct var1, Element var2) {
  20.       this.adjunct = var1;
  21.       this.element = var2;
  22.    }
  23.  
  24.    public boolean equals(Object var1) {
  25.       if (var1 instanceof GeneralAssociation) {
  26.          GeneralAssociation var2 = (GeneralAssociation)var1;
  27.          return this.element.equals(var2.element);
  28.       } else {
  29.          return false;
  30.       }
  31.    }
  32.  
  33.    public SchemaAdjunct getOwnerAdjunct() {
  34.       return this.adjunct;
  35.    }
  36.  
  37.    public String getSelector() {
  38.       return this.element.getAttribute("which");
  39.    }
  40.  
  41.    public int getKind() {
  42.       if (this.element.getNodeName().equals("document")) {
  43.          return 0;
  44.       } else if (this.element.getNodeName().equals("element")) {
  45.          return 1;
  46.       } else if (this.element.getNodeName().equals("attribute")) {
  47.          return 2;
  48.       } else {
  49.          throw new RuntimeException("invalid association kind");
  50.       }
  51.    }
  52.  
  53.    public Element getMetaData() {
  54.       return this.element;
  55.    }
  56.  
  57.    public String getProperty(String var1) {
  58.       Node var2 = this.findNode(var1, 0);
  59.       if (var2 == null) {
  60.          return null;
  61.       } else if (var2.getNodeType() == 2) {
  62.          return var2.getNodeValue();
  63.       } else {
  64.          StringBuffer var3 = new StringBuffer();
  65.          this.gatherTextContext(var2, var3);
  66.          return var3.toString().trim();
  67.       }
  68.    }
  69.  
  70.    public int countRepeatedProperty(String var1) {
  71.       Node var2 = this.findNode(String.valueOf(var1).concat(String.valueOf("[1]")), 0);
  72.       int var3 = 0;
  73.       if (var2 != null) {
  74.          for(String var4 = var2.getNodeName(); var2 != null; var2 = var2.getNextSibling()) {
  75.             if (var4.equals(var2.getNodeName())) {
  76.                ++var3;
  77.             }
  78.          }
  79.       }
  80.  
  81.       return var3;
  82.    }
  83.  
  84.    protected void gatherTextContext(Node var1, StringBuffer var2) {
  85.       for(Node var3 = var1.getFirstChild(); var3 != null; var3 = var3.getNextSibling()) {
  86.          if (var3.getNodeType() == 3 || var3.getNodeType() == 4) {
  87.             var2.append(var3.getNodeValue());
  88.          }
  89.       }
  90.  
  91.    }
  92.  
  93.    protected void setTextContext(Node var1, String var2) {
  94.       Object var3 = null;
  95.       boolean var4 = false;
  96.  
  97.       for(Node var5 = var1.getFirstChild(); var5 != null; var5 = var7) {
  98.          var7 = var5.getNextSibling();
  99.          if (var5.getNodeType() == 3 || var5.getNodeType() == 4) {
  100.             if (var4) {
  101.                var1.removeChild(var5);
  102.             } else {
  103.                var5.setNodeValue(var2);
  104.                var4 = true;
  105.             }
  106.          }
  107.       }
  108.  
  109.       if (!var4) {
  110.          Text var6 = var1.getOwnerDocument().createTextNode(var2);
  111.          var1.appendChild(var6);
  112.       }
  113.  
  114.    }
  115.  
  116.    protected Node findNode(String var1, int var2) {
  117.       StringTokenizer var3 = new StringTokenizer(var1, "[]/", true);
  118.       return findNode(this.element, var3, var2);
  119.    }
  120.  
  121.    protected static Node findNode(Element var0, StringTokenizer var1, int var2) {
  122.       if (!var1.hasMoreTokens()) {
  123.          if (var2 == 2) {
  124.             Node var8 = var0.getParentNode();
  125.             var8.removeChild(var0);
  126.          }
  127.  
  128.          return var0;
  129.       } else {
  130.          String var3 = var1.nextToken();
  131.          if (var3.equals("/")) {
  132.             return findNode(var0, var1, var2);
  133.          } else if (var3.startsWith("@")) {
  134.             String var9 = var3.substring(1);
  135.             Attr var12 = var0.getAttributeNode(var9);
  136.             if (var12 != null && var2 == 2) {
  137.                var0.removeAttributeNode(var12);
  138.             } else if (var12 == null && var2 == 1) {
  139.                var12 = var0.getOwnerDocument().createAttribute(var9);
  140.                var0.setAttributeNode(var12);
  141.             }
  142.  
  143.             return var12;
  144.          } else {
  145.             int var4 = 0;
  146.             if (var1.hasMoreTokens()) {
  147.                try {
  148.                   String var5 = var1.nextToken();
  149.                   if (var5.equals("[")) {
  150.                      var4 = Integer.parseInt(var1.nextToken());
  151.                      var5 = var1.nextToken();
  152.                   }
  153.                } catch (Exception var7) {
  154.                   throw new AdjunctException("invalid property specification");
  155.                }
  156.             }
  157.  
  158.             Object var11 = null;
  159.  
  160.             for(Node var6 = var0.getFirstChild(); var6 != null; var6 = var6.getNextSibling()) {
  161.                if (var6.getNodeName().equals(var3)) {
  162.                   if (var11 != null) {
  163.                      if (var4 == 0) {
  164.                         throw new AdjunctException("ambiguous property specification");
  165.                      }
  166.                   } else {
  167.                      if (var4 == 1) {
  168.                         var11 = findNode((Element)var6, var1, var2);
  169.                         break;
  170.                      }
  171.  
  172.                      if (var4 == 0) {
  173.                         var11 = findNode((Element)var6, var1, var2);
  174.                      } else {
  175.                         --var4;
  176.                      }
  177.                   }
  178.                }
  179.             }
  180.  
  181.             if (var11 != null && var2 == 2) {
  182.                var0.removeChild((Node)var11);
  183.             } else if (var11 == null && var2 == 1) {
  184.                var11 = var0.getOwnerDocument().createElement(var3);
  185.                var0.appendChild((Node)var11);
  186.                if (var1.hasMoreTokens()) {
  187.                   var11 = findNode((Element)var11, var1, var2);
  188.                }
  189.             }
  190.  
  191.             return (Node)var11;
  192.          }
  193.       }
  194.    }
  195.  
  196.    public void setProperty(String var1, String var2) {
  197.       Node var3 = this.findNode(var1, 1);
  198.       if (var3.getNodeType() == 2) {
  199.          var3.setNodeValue(var2);
  200.       } else {
  201.          this.setTextContext(var3, var2);
  202.       }
  203.  
  204.    }
  205.  
  206.    public void removeProperty(String var1) {
  207.       this.findNode(var1, 2);
  208.    }
  209. }
  210.